技術問答
技術文章
iT 徵才
Tag
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2024 iThome 鐵人賽
DAY
26
0
佛心分享-刷題不只是刷題
[30天LeetCode挑戰] 每天一點演算法,讓技巧融會貫通
系列 第
26
篇
[Day26] 2-3-4樹 筆記
16th鐵人賽
很懶欸
2024-10-10 18:04:48
358 瀏覽
分享至
2-3-4 樹筆記
基本定義
2-3-4 樹
是一種
自平衡多路搜尋樹(Balanced Multi-Way Search Tree)
,每個節點最多可以包含 2、3 或 4 個子節點,因此命名為 2-3-4 樹。
2-3-4 樹的節點有以下三種類型:
2-節點
:包含 1 個鍵與 2 個子節點。
3-節點
:包含 2 個鍵與 3 個子節點。
4-節點
:包含 3 個鍵與 4 個子節點。
鍵值大小順序規則
:
所有左子樹的鍵值小於父節點的第一個鍵值。
中間子樹的鍵值介於父節點的兩個鍵值之間。
右子樹的鍵值大於父節點的第二個鍵值。
特點
2-3-4 樹是一種
完全平衡樹
,所有葉節點在同一層,樹的高度盡量保持最低,以便在最壞情況下仍能保證
O(log n)
的操作效率。
與其他平衡樹相比,2-3-4 樹因其節點可以容納多個鍵值,所以在插入與刪除時,調整的次數比 AVL 樹或紅黑樹少。
操作時間複雜度
搜尋(Search)
:
O(log n)
插入(Insert)
:
O(log n)
刪除(Delete)
:
O(log n)
常見操作
插入(Insertion)
從根節點開始
:
若根節點是 4-節點,則先分裂根節點,將中間鍵值提升,然後繼續插入。
找到適當的子樹位置
:
按照鍵值大小找到合適的子樹進行遞迴搜索。
處理 4-節點
:
當遇到 4-節點時,將該節點進行分裂,將中間的鍵值提升到父節點(如果父節點也是 4-節點,則繼續分裂),將 4-節點分解為兩個 2-節點。
插入新鍵值
:
將新鍵值插入到合適的 2-節點或 3-節點中,保證節點內的鍵值順序正確。
刪除(Deletion)
找到要刪除的鍵值位置
:
若刪除的是葉節點的鍵值,直接刪除即可。
刪除內部節點的鍵值
:
用前驅或後繼鍵值替換要刪除的鍵值,然後在葉節點中刪除前驅或後繼鍵值。
處理 2-節點的鍵值不足
:
若刪除操作導致節點鍵值不足(2-節點變成 1-節點),則需要進行「鍵值借用」或「合併」操作。
鍵值借用
:從相鄰兄弟節點中借取一個鍵值,使當前節點成為 2-節點。
合併節點
:若兄弟節點是 2-節點,則將兄弟節點與父節點的鍵值合併,形成新的 3-節點或 4-節點。
節點分裂(Node Split)
當 4-節點插入新鍵值後無法容納更多的鍵值時,需要進行節點分裂:
將 4-節點中的中間鍵值提升到父節點。
4-節點分解為兩個 2-節點。
若父節點也是 4-節點,則繼續對父節點進行分裂,直到樹恢復平衡。
優缺點
優點
高度平衡
:所有葉節點都位於相同的深度,避免了退化成鏈表的情況。
操作簡單
:每個節點最多只有三個鍵值,可以有效地減少旋轉與調整次數。
穩定性高
:適合用於資料庫索引等需要大量查詢操作的場景。
缺點
節點需要儲存更多鍵值
:相較於二元搜尋樹,每個節點需要儲存更多鍵值與子節點指標,因此節點的記憶體消耗較大。
插入與刪除較為複雜
:當節點鍵值數過多時,可能需要進行多次分裂或合併操作。
使用場景
資料庫系統索引結構
:如 B 樹、B+ 樹等結構的基礎,用來提升資料庫查詢效能。
檔案系統管理
:用來建立檔案系統的層次結構,方便快速查找檔案或資料夾。
平衡樹管理
:適合用於鍵值數量較多且需要平衡操作的應用場景。
留言
追蹤
檢舉
上一篇
[Day25] 2-3樹 與 紅黑樹 筆記
下一篇
[Day27] 關於Heap的刷題筆記(1046)
系列文
[30天LeetCode挑戰] 每天一點演算法,讓技巧融會貫通
共
30
篇
目錄
RSS系列文
訂閱系列文
8
人訂閱
26
[Day26] 2-3-4樹 筆記
27
[Day27] 關於Heap的刷題筆記(1046)
28
[Day28] 2-3樹刷題筆記(701)
29
[Day29] LeetCode第938題 Range Sum of BST 刷題筆記
30
[Day30] LeetCode第1382題 Balance a Binary Search Tree 刷題筆記
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
403
組
團體組數
13
組
累計文章數
2903
篇
最後報名日
9/15
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
17th鐵人賽
windows
php
c#
windows server
linux
css
react
熱門問題
不知道網路紅隊的要去那加公司
更換FW後Public IP service無法使用
鼎新ERP欄位可修改預設值嗎
Ansible 連線主機的 port 不是 22 遇到的問題
備份映像檔
Outlook 寄件備份消失問題 (已解決)
請問有人遇過在lightsail上部屬fastapi失敗的案例?
aws ec2 檢查故障問題
IIS 管理員 連線功能不見
熱門回答
鼎新ERP欄位可修改預設值嗎
不知道網路紅隊的要去那加公司
Ansible 連線主機的 port 不是 22 遇到的問題
更換FW後Public IP service無法使用
備份映像檔
熱門文章
什麼是 Signal ?
第10天,No-Code 快速上線又省錢 / 原汁排骨湯 台北最好喝的排骨湯(台北萬華)| 30天滷肉飯
序: AI 加速編碼後,你該學什麼?
第11天,LibreOffice 更省錢 / 司機俱樂部 宵夜好選擇(台北松山)| 30天滷肉飯
第12天,即時通訊軟體選擇 / 金峰滷肉飯 台北名店(台北中正)| 30天滷肉飯
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}